package com.lw.sbdemo2.common.wechat.handler;

import com.lw.sbdemo2.common.wechat.builder.TextBuilder;
import com.lw.sbdemo2.common.wechat.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * <p>标题: 美折微信 - 消息处理器</p>
 * <p>描述: 处理所有聊天框发送得消息</p>
 * <p>版权: Copyright (c) 2018</p>
 * <p>公司: 山人行工作室</p>
 *
 * @version: 1.0
 * @author: LinWang
 * @date 2018-7-18
 */
@Component
@Slf4j
public class MsgHandler extends AbstractHandler {

    /**
     * 消息处理器 - 入口
     */
    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage,
                                    Map<String, Object> context, WxMpService weixinService,
                                    WxSessionManager sessionManager) {

        // 回复文本
        String replayContent = "";

        log.info("------------接收用户输入消息------------");
        log.info("发送方帐号（一个OpenID）：" + wxMessage.getFromUser());
        log.info("消息类型（MsgType）:" + wxMessage.getMsgType());
        log.info("接收内容（Content）:" + wxMessage.getContent());

        //当用户输入关键词如“你好”，“客服”等，并且有客服在线时，把消息转发给在线客服
        try {
            if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
                    && weixinService.getKefuService().kfOnlineList()
                    .getKfOnlineList().size() > 0) {
                return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE()
                        .fromUser(wxMessage.getToUser())
                        .toUser(wxMessage.getFromUser()).build();
            }
        } catch (WxErrorException e) {
            e.printStackTrace();
        }

        //TODO 组装回复消息
        replayContent = "收到信息内容：" + JsonUtils.toJson(wxMessage);

        //返回值封装
        return new TextBuilder().build(replayContent, wxMessage, weixinService);
    }
}
